package modelo.entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.IndexColumn;

@Entity
@Table(name="inmueble",schema="public")
@PrimaryKeyJoinColumn(name="id")
public class Inmueble implements Serializable {
    
	 
	@Id    
	@SequenceGenerator(name="SeqId", sequenceName="public.inmueble_id_seq", allocationSize=1)	
	@GeneratedValue(generator="SeqId")
	private int id;
	
	@Column(name="direccion")
	private String direccion;
	
	@Column(name="precio")
	private double precio;
	
	@Column(name="tamano")
	private double tamano;
	
	@Column(name="nrohabitaciones")
	private int nrohabitaciones;
	
	@Column(name="nroestacionamiento")
	private int nroestacionamientos;
	
	@Column(name="tipooperacion")
	private String tipooperacion;

	@Column(name="tipoinmueble")
	private String tipoInmueble;
	
	
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="id_zona") 
	private Zona zona;
	
	@OneToMany(cascade= CascadeType.ALL)
    @JoinColumn(name="id_inmueble")
	private List<Foto> fotos;
	
	
	@OneToOne(cascade=CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private Anuncio anuncio;
	
	 @Transient
		private boolean editingStatus = false;
	
	public Inmueble() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public Inmueble(String direccion, double precio, int nrohabitaciones, int nroestacionamientos, String tipooperacion, String tipoInmueble, double tamano) 
	{
       this.direccion =direccion;
       this.precio =precio;
       this.nrohabitaciones = nrohabitaciones;
       this.nroestacionamientos = nroestacionamientos;
       this.tipoInmueble = tipoInmueble;
       this.tipooperacion = tipooperacion;  
       this.tamano = tamano;
	}

	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getDireccion() {
		return direccion;
	}
	
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	
	public double getPrecio() {
		return precio;
	}
	
	public void setPrecio(double precio) {
		this.precio = precio;
	}
	
	public double getTamano() {
		return tamano;
	}
	
	public void setTamano(double tamano) {
		this.tamano = tamano;
	}
	
	public int getNrohabitaciones() {
		return nrohabitaciones;
	}
	public void setNrohabitaciones(int nrohabitaciones) {
		this.nrohabitaciones = nrohabitaciones;
	}
	public int getNroestacionamientos() {
		return nroestacionamientos;
	}
	public void setNroestacionamientos(int nroestacionamientos) {
		this.nroestacionamientos = nroestacionamientos;
	}
	public String getTipooperacion() {
		return tipooperacion;
	}
	public void setTipooperacion(String tipooperacion) {
		this.tipooperacion = tipooperacion;
	}
	
	public Anuncio getAnuncio() {
		return anuncio;
	}

	public void setAnuncio(Anuncio anuncio) {
		this.anuncio = anuncio;
	}
	
	public String getTipoInmueble() {
		return tipoInmueble;
	}

	public void setTipoInmueble(String tipoInmueble) {
		this.tipoInmueble = tipoInmueble;
	}

	public List<Foto> getFotos() {
		return fotos;
	}
	public void setFotos(List<Foto> fotos) {
		this.fotos = fotos;
	}
	
	public Zona getZona() {
		return zona;
	}

	public void setZona(Zona zona) {
		this.zona = zona;
	}

	public boolean getEditingStatus() {
		return editingStatus;
	}

	public void setEditingStatus(boolean editingStatus) {
		this.editingStatus = editingStatus;
	}
	
	
}
